package service

import (
	"errors"
	"go-admin/internal/model"
	mr "go-admin/internal/model/api/model_request"
	"go-admin/pkg/app"
	"go-admin/pkg/errcode"
)

func (s *Service) CreateJob(param *mr.CreateJobRequest) (string, error) {
	// 判断岗位是否存在
	job, err := s.dao.GetJobByJobNameAndJobCode(param)
	if err != nil {
		return job.Id, err
	}
	// 判断是否存在
	if job.Id != "" {
		return job.Id, errors.New("岗位已存在")
	}
	insertId, err := s.dao.CreateJob(param)
	if err != nil {
		return insertId, err
	}
	return insertId, nil
}

func (s *Service) CountJob(param *mr.ListJobRequest) (int, error) {
	return s.dao.CountJob(param)
}

func (s *Service) GetJobList(param *mr.ListJobRequest, pager *app.Pager) ([]*model.Job, error) {
	return s.dao.GetJobList(param, pager.PageIndex, pager.PageSize)
}

func (s *Service) UpdateJob(param *mr.UpdateJobRequest) error {
	// 判断跟新数据是否冲突
	jobParam := mr.CreateJobRequest{
		JobName: param.JobName,
		JobCode: param.JobCode,
	}
	job, err := s.dao.GetJobByJobNameAndJobCode(&jobParam)
	if err != nil {
		return err
	}
	// 判断是否存在
	if job.Id != "" {
		return errors.New("岗位已存在")
	}
	if err = s.dao.UpdateJob(param); err != nil {
		return errcode.ErrorUpdateFail
	}
	return nil
}

func (s *Service) GetJobById(id string) (*model.Job, error) {
	dictItem, err := s.dao.GetJobById(id)
	if err != nil {
		return nil, err
	}
	// 判断是否存在
	if dictItem.Id == "" {
		return nil, err
	}
	return dictItem, nil
}

func (s *Service) DeleteJobS(ids []string) error {
	return s.dao.DeleteJobS(ids)
}
func (s *Service) ListAll() ([]*model.Job, error) {
	return s.dao.ListAll()
}
